<?php

// load SOAP library
require_once("libs/nusoap.php");
require_once("libs/functions.php");
// load library that holds implementations of functions we're making available to the web service
// set namespace

$ns="http://localhost/";
// create SOAP server object

$server = new soap_server();

// setup WSDL file, a WSDL file can contain multiple services
$server->configureWSDL('Calculator',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
$server->wsdl->addComplexType(
    'ArrayOfString',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]')),
    'xsd:string'
);


/**
  *************************************** 
  ** REGISTRO LOS WEB METODOS          **
  ***************************************
**/
$server->register('hello',
	array('name' => 'xsd:string'), 	// input parameters
	array('saludo' => 'xsd:string'), 							// output parameter
	$ns, 														// namespace
    "$ns#ws_add",		                						// soapaction
    'rpc',                              						// style
    'encoded',                          						// use
    'adds two integer values and returns the result'           	// documentation
	);

$server->register('ws_add',
	array('int1' => 'xsd:integer','int2' => 'xsd:integer'), 	// input parameters
	array('total' => 'xsd:integer'), 							// output parameter
	$ns, 														// namespace
    "$ns#ws_add",		                						// soapaction
    'rpc',                              						// style
    'encoded',                          						// use
    'adds two integer values and returns the result'           	// documentation
	);



$server->register('registrarAlumno',
	array('idAlumno' => 'xsd:string', 'nombre' => 'xsd:string', 'serial' => 'xsd:string', 'idEscuela' => 'xsd:integer', 'edad' => 'xsd:string', 'cantpersonas' => 'xsd:string'), 	// input parameters
	array('retorno' => 'xsd:string'), 										// output parameter
	$ns, 															// namespace
       "$ns#ws_add", 'rpc', 'encoded',
       'Registro del alumno'
	);

$server->register('registrarAlumnosClases',
	array('idAlumno' => 'xsd:string', 'claseshechasparam' => 'xsd:string'), 	// input parameters
	array('retorno' => 'xsd:string'), 										// output parameter
	$ns, 															// namespace
       "$ns#ws_add", 'rpc', 'encoded',
       'Registro del avance del alumno'
	);

$server->register('registrarAlumnosEncuestas',
	array('idAlumno' => 'xsd:string', 'idencuesta' => 'xsd:integer', 'identificador' => 'xsd:string', 'valor' => 'xsd:string' ), 	// input parameters
	array('retorno' => 'xsd:string'), 										// output parameter
	$ns, 															// namespace
       "$ns#ws_add", 'rpc', 'encoded',
       'Registro del avance del alumno'
	);


$server->register('obtenerEscuelas',
	array(), 	// input parameters
	array('retorno' => 'tns:ArrayOfString'), 							// output parameter
	$ns, 														// namespace
       "$ns#ws_add", 'rpc', 'encoded',
       'Obtener todas las escuelas'
	);


$server->register('obtenerClasesHabilitadas',
	array('idEscuela' => 'xsd:integer'), 	// input parameters
	array('retorno' => 'tns:ArrayOfString'), 							// output parameter
	$ns, 														// namespace
       "$ns#ws_add", 'rpc', 'encoded',
       'Obtener las clases habilitadas para la escuela'
	);

/**
  *************************************** 
  ** IMPLEMENTACION DE LOS WEB METODOS **
  ***************************************
**/
require_once("persistencia.php");
require_once("leccion.php");


function hello($name) {
    return 'Mbaeteko, ' . $name;
}

function ws_add($int1, $int2){
   $a=$int1+$int2;
   return $a;
}

function registrarAlumno($idalumno, $nombre, $apellido, $serial_xo, $idescuela, $edad, $cantpersonas){
	$stmSelect = "SELECT * FROM ALUMNOS WHERE trim(upper(idalumno)) = trim(upper('".$idalumno."'))";
	$edadef = 0;
	$cantpersonasef = 0;
	$bd = new persistencia();

	try{
		$edadef	= intval($edad);
	} catch (Exception $e) {
		$edadef = 0;
	}

	try{
		$cantpersonasef	= intval($cantpersonas);
	} catch (Exception $e) {
		$cantpersonasef	= 0;
	}

	try{
		$idescuela = intval($idescuela);
	} catch (Exception $e) {
		$idescuela = Null;
	}


	if ($idescuela ==  Null ){
		$stmInsert = "INSERT INTO ALUMNOS (idalumno, nombre, apellido, serial_xo, edad, cantpersonas ) 
				                VALUES ( '$idalumno', '$nombre', '$apellido', '$serial_xo', $edadef, $cantpersonasef )";
	}else{
		/**** Incio Verificar escuela ***/
		if ( $bd->conectar() ) {
			$resultado = $bd->consultar('select e.idescuela as idescuela from escuelas e where e.idescuela = '.$idescuela);

			//por si hay errores en la consulta
			if ( !$resultado ) { 
				$mens = "ERROR CONEX:".pg_last_error($bd->conexion);
				$bd->desconectar();
			}else{
				$fila = pg_fetch_array($resultado);
				if( !$fila ) {
					$idescuela = Null;
				}else {
					$idescuela = $fila['idescuela'];
				}
				$bd->desconectar();
			}
		}
		/**** Fin Verificar escuela ***/
		if ($idescuela == Null){
			$stmInsert = "INSERT INTO ALUMNOS (idalumno, nombre, apellido, serial_xo, edad, cantpersonas ) 
				                VALUES ( '$idalumno', '$nombre', '$apellido', '$serial_xo', $edadef, $cantpersonasef )";
		}else{
			$stmInsert = "INSERT INTO ALUMNOS (idalumno, nombre, apellido, serial_xo, idescuela, edad, cantpersonas ) 
						VALUES ( '$idalumno', '$nombre', '$apellido', '$serial_xo', $idescuela, $edadef, $cantpersonasef)";
		}
	}

	$alumnoStr = "ERROR ";
	$sep = "#@#"; 

	if ( $bd->conectar() ) {
		//Buscamos si existe en la BD 
		$resultado = $bd->consultar($stmSelect);

		//por si hay errores en la consulta
		if ( !$resultado ) { 
			$mens = "ERROR CONEX:".pg_last_error($bd->conexion); 
			$bd->desconectar();

		}else{
			$fila = pg_fetch_array($resultado);
			if( !$fila ) {
				//INSERTAMOS, ya que no encontramos ningun registro
				$resultadoInsert = $bd->consultar($stmInsert);
				if ( !$resultadoInsert ) { 
					$mens = "ERR-INS-".pg_last_error($bd->conexion); 
				}else{
					$mens = $stmInsert;
				}
				$alumnoStr = $idalumno.$sep.$nombre.$sep.$apellido.$sep.$serial_xo.$sep.$idescuela.$sep.$edadef.$sep.$cantpersonasef;
				//print " Alumno I= ". $alumnoStr;
			}else {
				//ENVIAMOS LOS DATOS CORRECTOS DEL ALUMNO
				$alumnoStr = $fila['idalumno'].$sep.$fila['nombre'].$sep.$fila['apellido'].$sep.$fila['serial_xo'].$sep.$fila['idescuela'].$sep.$fila['edad'].$sep.$fila['cantpersonas'];
				//print " Alumno U= ". $alumnoStr;
			}
			$bd->desconectar();
		}
	}else{
		$alumnoStr = "ERROR BD:".pg_last_error($bd->conexion); 
	}

	return $alumnoStr;
}

function registrarAlumnosClases($idalumno, $claseshechasparam){

	$clasesHechas = split('@@@', $claseshechasparam);
	$mens = "ERROR ";
	$elementosLecciones = "";
	$elementosClases = "";
	$bd = new persistencia();
	$yaexiste = "";
	if ( $bd->conectar() ) {
		$cant = count($clasesHechas);
		for ($i = 0; $i < $cant; $i++) {
			$cad = split('#', $clasesHechas[$i]);
			if (count($cad) == 2){
			   $idclase = $cad[0];
			   $idleccion = $cad[1];

			   $stmInsert= "INSERT INTO alumnos_lecciones (idalumno, idclase, idleccion) VALUES ( '". $idalumno. "',". $idclase. ", ".$idleccion.");";
			   $resultadoInsert= $bd->consultar($stmInsert);
			   if ( !$resultadoInsert ) { 
				    $yaexiste = $yaexiste."(".$idclase.",".$idleccion.") ";  // pg_last_error($bd->conexion); 
			   }

			   $elementosClases    = $elementosClases.";".$idclase;
			   $elementosLecciones = $elementosLecciones.";".$idleccion;
			}
		}
		$bd->desconectar();
		return "Cantidad=".$cant." Clases= ".$elementosClases." Lecciones=".$elementosLecciones." Ya Existe=".$yaexiste;
	}else{
		$mens = "ERROR BD:".pg_last_error($bd->conexion); 
	}

	return $mens;
}

function obtenerEscuelas(){
    $sep = "#@#";
    $ret = "";
    $retarray = array();
    $bd = new persistencia();
    if ( $bd->conectar() ) 
    {
        $resultado = $bd->consultar("SELECT * FROM Escuelas order by idescuela");
        if ( $resultado ) 
        { 
           while ($fila = pg_fetch_array($resultado)) 
           {
              $ret = $fila["idescuela"];
              $ret = $ret.$sep.$fila["nombre"];
              $ret = $ret.$sep.$fila["ciudad"];
              $retarray[] = $ret;
           }
        }
        $bd->desconectar();
    }
    return $retarray;
}


function obtenerClasesHabilitadas($idescuela){
    $sep = "#@#";
    $ret = "";
    $retarray = array();
    $bd = new persistencia();
    $stmSelect = "select ec.idclase from escuelas_clases ec where ec.idescuela = ".$idescuela." and ec.habilitada = true order by ec.idclase";

    if ( $bd->conectar() ) 
    {
        $resultado = $bd->consultar($stmSelect);
        if ( $resultado ) 
        { 
           while ($fila = pg_fetch_array($resultado)) 
           {
              $ret = $fila["idclase"];
              $retarray[] = $ret;
           }
        }
        $bd->desconectar();
    }
    return $retarray;
}


/** REGISTRAR ENCUENTAS **/
function registrarAlumnosEncuestas($idalumno, $idencuesta, $identificador, $valor){

	$bd = new persistencia();
	$mens = "";
	if ( $bd->conectar() ) {

		$stmInsert= "INSERT INTO alumnos_encuestas(idalumno,idencuesta,identificador,valor) VALUES('".$idalumno."',".$idencuesta.", '".$identificador."', '".$valor."');";
		$resultadoInsert= $bd->consultar($stmInsert);
		if ( !$resultadoInsert ) { 
			$mens = "Ya-existe=(".$idalumno.",".$idencuesta.",".$identificador.") ";  // pg_last_error($bd->conexion); 
		}else{
			$mens = "INSERT-OK=(".$idalumno.",".$idencuesta.",".$identificador.") ";  // pg_last_error($bd->conexion); 
		}
		$bd->desconectar();
	}else{
		$mens = "ERROR BD:".pg_last_error($bd->conexion); 
	}

	return $mens;
}


/**
//Pruebas
$pa = "7#6";
$pb = "2#3";
$pc = "2#5";
$par = "@@@" . $pa . "@@@" . $pb . "@@@" . $pc;

$a = registrarAlumnosClases("miserialXYZ", $par );
print "\nA = ";
print $a;
**/

// service the methods 
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>


